基于RK3568的Linux开发

您所在的位置:网站首页 smart sdk 基于RK3568的Linux开发

基于RK3568的Linux开发

2023-10-03 06:11| 来源: 网络整理| 查看: 265

第一篇 RK3568 Linux系统移植

文章目录

目录

第一篇 RK3568 Linux系统移植

文章目录

前言

一、编译环境搭建

1.编译环境介绍

2.安装依赖

二、获取官方的RK356X_Linux_SDK包

1.解压RK356X_Linux_SDK压缩包

2.目录结构

 三、编译linux系统固件

1 选择合适的板级配置文件

2.编译Linux系统

3.打包固件 

四、系统移植和定制化

1.板级配置文件定制化

1)新建默认配置文件

2)新建设备树文件

3)新建板级配置文件

2.修改电源域

3.更改调试串口

4.下载固件

5.查看调试信息

6.降低内存的运行频率

 7.更新固件

五、debian根文件系统的构建

1.配置环境变量

2.编译debian

3.更新固件

参考教程

前言

本文主要介绍了如何编译官方的RK356X_Linux_SDK包。针对自制的RK3568板卡对Linux系统进行移植和裁剪。

一、编译环境搭建 1.编译环境介绍

操作系统:Ubuntn18.04

内存:4GB及其以上

2.安装依赖

在安装依赖之前,对操作系统进行更新

 sudo apt update

安装依赖

sudo apt-get install repo git ssh make gcc libssl-dev liblz4-tool \

expect g++ patchelf chrpath gawk texinfo chrpath diffstat binfmt-support \

qemu-user-static live-build bison flex fakeroot cmake \

unzip device-tree-compiler python-pip ncurses-dev python-pyelftools

 确保所有依赖安装成功后,才能进行下一步

二、获取官方的RK356X_Linux_SDK包 1.解压RK356X_Linux_SDK压缩包

将下载好的RK356X_LINUX_20220831文件放到/home/user目录下,如图所示:

 进入RK356X_LINUX_20220831目录:

user@ubuntu18:~$ cd RK356X_LINUX_20220831/

 解压RK356X_Linux_SDK压缩包

user@ubuntu18:~/RK356X_LINUX_20220831$ sudo cat x* | tar xz

解压后的文件如图所示:

进入SDK包根目录

user@ubuntu18:~/RK356X_LINUX_20220831$ cd RK356X_LINUX_SDK_V1.3.0_20220620/RK356X_LINUX_SDK_V1.3.0_20220620/

2.目录结构

SDK包根目录下的文件夹参考如下:

 三、编译linux系统固件

注意:以下操作均在SDK包的根目录下进行

瑞芯微为我们提供了一个很方便的编译脚本build.sh.可进行分步编译和一键编译。

查看编译脚本的帮助信息

./build.sh -h

1 选择合适的板级配置文件

查看系统默认的板级配置文件

./build.sh lunch

 

选择板级配置文件

根据自己板子芯片和内存的选型,选择和板子适配的板级配置文件

方便后期进行系统移植和定制化

例如:我们使用的芯片为RK3568,内存为DDR4,因此选择第5个配置文件

2.编译Linux系统

由于我们是第一次进行编译,选择全自动编译,确保SDK包可以使用

./build.sh all

在编译kernel的过程中,系统会弹出电源域的图形化界面,所以需要对设备树中的电源域配置进行再次确认,找到对应的设备树文件,与之一一对应即可。

电源域的图形化界面如图所示:

电源域配置所在的设备树文件为rk3568-evb.dtsi 该文件位为SDK包根目录下/kernel/arch/arm64/boot/dts/rockchip/目录下

设备树中的电源域默认配置如下:

&pmu_io_domains { status = "okay"; pmuio2-supply = ; vccio1-supply = ; vccio3-supply = ; vccio4-supply = ; vccio5-supply = ; vccio6-supply = ; vccio7-supply = ; }; 3.打包固件 

执行以下命令,生成的镜像将会被打包到rockdev 目录下

./mkfirmware.sh

执行以下命令,在rockdev 目录下生成update.img

./build.sh updateimg

四、系统移植和定制化 1.板级配置文件定制化 1)新建默认配置文件

RK3568的默认配置文件存放在SDK工程kernel/arch/arm64/configs/目录下

在当前目录下,新建一个名为wheel_linux_defconfig的默认配置文件(可根据自己要求进行命名)

将rockchip_linux_defconfig文件中的内容复制到wheel_linux_defconfig,在板级配置文件会将默认的配置文件更改为新建的配置文件

在进行驱动开发时,我们可以通过内核的图形化界面和直接更改默认配置文件的方式,选择驱动是编译进内核还是编译成模块,亦或者是不编译。使用自己的默认配置文件可以实现驱动的定制化。

2)新建设备树文件

RK3568的设备树文件存放在SDK工程kernel/arch/arm64/boot/dts/rockchip/目录下

在当前目录下,新建一个名为rk3568-wheel-lpddr4.dts的设备树文件(一般命名格式为:芯片名称-厂商名称-内存类型.dts)

将rk3568-evb1-ddr4-v10-linux.dts文件中的内容复制到rk3568-wheel-lpddr4.dts

内容如下

// SPDX-License-Identifier: (GPL-2.0+ OR MIT) /* * Copyright (c) 2020 Rockchip Electronics Co., Ltd. * */ #include "rk3568-evb1-ddr4-v10.dtsi" #include "rk3568-linux.dtsi" #include

使用自己的设备树文件,可以根据自己的需求对内核的功能进行定制化。对于需要修改的设备节点,只需要在自己的设备树文件当中修改即可。这样既可以保证原始设备树的完整性,又与其他不同厂商制作板卡的设备树文件相互独立,互不干扰。

3)新建板级配置文件

RK3568的板级配置文件存放在SDK工程device/rockchip/rk356x目录下

默认的板级配置文件为

其中我们主要需要关注的内容如下:

新建一个BoardConfig-rk3568-wheel-lpddr4.mk板级配置文件

复制BoardConfig-rk3568-evb1-ddr4-v10.mk文件的内容到BoardConfig-rk3568-wheel-lpddr4.mk板级配置文件当中,并对其进行修改

修改后的内容如下

到此,通过修改自己的板级配置文件,简单现了Linux内核的定制化,接下来,便是针对自己的板卡,对内核进行裁剪和移植。

2.修改电源域

在SDK工程/kernel/arch/arm64/boot/dts/rockchip/目录下的rk3568-wheel-lpddr4.dts设备树文件中进行电源域的修改

电源域默认配置如下:

&pmu_io_domains { status = "okay"; pmuio2-supply = ; vccio1-supply = ; vccio3-supply = ; vccio4-supply = ; vccio5-supply = ; vccio6-supply = ; vccio7-supply = ; };

根据自制板卡的原理图,对电源域进行配置

 配置的电源域配置为

&pmu_io_domains { status = "okay"; //自己的板子电源域配置 pmuio1-supply = ; pmuio2-supply = ; vccio1-supply = ; vccio3-supply = ; vccio4-supply = ; vccio5-supply = ; vccio6-supply = ; vccio7-supply = ; }; &i2c0 { rk809: pmic@20 { regulators { //自己的板子不输出电压 vccio_0v: LDO_REG4 { regulator-always-off; regulator-boot-on; regulator-min-microvolt = ; regulator-max-microvolt = ; regulator-name = "vccio_0v"; regulator-state-mem { regulator-off-in-suspend; }; }; /* //默认LDO_REG4节点配置 vccio_acodec: LDO_REG4 { regulator-always-on; regulator-boot-on; regulator-min-microvolt = ; regulator-max-microvolt = ; regulator-name = "vccio_acodec"; regulator-state-mem { regulator-off-in-suspend; }; }; */ }; }; };

3.更改调试串口

修改uboot的调试串口

找到SDK工程中rkbin/tools/目录下的ddrbin_param.txt文件

对其进行如下的修改:

uart id=4 uart iomux=1

在rkbin/tools/目录下执行以下命令,使新配置生效

./ddrbin_tool ddrbin_param.txt ../bin/rk35/rk3568_ddr_1560MHz_v1.13.bin

修改uboot设备树中调试串口的配置

找到SDK工程u-boot/arch/arm/dts/目录下的rk3568-u-boot.dtsi设备树文件

修改如下:

/ { aliases { serial4 = &uart4; //添加uart4的配置 ethernet0 = &gmac0; ethernet1 = &gmac1; mmc0 = &sdhci; mmc1 = &sdmmc0; mmc2 = &sdmmc1; }; chosen { stdout-path = &uart4; //uart2->uart4 u-boot,spl-boot-order = &sdmmc0, &sdhci, &nandc0, &spi_nand, &spi_nor; }; }; &uart4 { //uart2->uart4 clock-frequency = ; u-boot,dm-spl; /delete-property/ pinctrl-names; /delete-property/ pinctrl-0; status = "okay"; };

修改kernel的调试串口

在SDK工程对/kernel/arch/arm64/boot/dts/rockchip/目录下的rk3568-wheel-lpddr4.dts设备树文件中进行调试串口修改,修改后的调试串口节点如下:

/{ //调试串口配置uart2->uart4 chosen:chosen { bootargs = "earlycon=uart8250,mmio32,0xfe680000 console=ttyFIQ0 root=PARTUUID=614e0000-0000 rw rootwait"; //uart4的地址为0xfe680000 }; fiq-debugger { //uart2->uart4 compatible = "rockchip,fiq-debugger"; rockchip,serial-id = ; //uart4对应的serial-id为4 rockchip,wake-irq = ; /* If enable uart uses irq instead of fiq */ rockchip,irq-mode-enable = ; rockchip,baudrate = ; /* Only 115200 and 1500000 */ interrupts = ; pinctrl-names = "default"; pinctrl-0 = ; //uart4使用的GPIO status = "okay"; }; //关闭uart4普通串口功能 &uart4 { status = "disabled"; };

 更改完成后,需要对uboot和kernel进行重新编译

4.下载固件

使用瑞芯微开发工具RKDevTool,它提供分立升级固件及整个 update 升级固件功能

 点击升级固件。点击固件,选择编译好的update.img镜像文件

 最后点击升级即可

5.查看调试信息

串口调试工具MobaXterm下载地址:https://mobaxterm.mobatek.net/

使用串口调试器连接PC端USB和板卡的UART4

打开串口调试工具MobaXterm。

选择 session 为 Serial。

将 Serial port 修改为在设备管理器中找到的 COM 端口。

设置 Speed (bsp) 为 1500000。

点击 OK 按钮。

给板子上电,接收调试信息

根据调试信息,定位系统出现问题的位置,对内核进行相应的修改

根据SDK工程docs/Common/DDR目录下的Rockchip_Trouble_Shooting_DDR_CN.pdf(DDR问题排查手册)的描述。尝试通过降低内存的运行频率的方式来提高系统的稳定性。

6.降低内存的运行频率

找到SDK工程中rkbin/tools/目录下的ddrbin_param.txt文件

对其进行如下的修改:

/* Please get help from ddrbin_tool_user_guide.txt and './ddrbin_tool -h' */ start tag=0x12345678 ddr2_freq= lp2_freq= ddr3_freq= lp3_freq= ddr4_freq= lp4_freq=1000                                //将lpddr4的最高频率设置为1000Mhz lp4x_freq= lp5_freq=

在rkbin/tools/目录下执行以下命令,使新配置生效

./ddrbin_tool ddrbin_param.txt ../bin/rk35/rk3568_ddr_1560MHz_v1.13.bin

 7.更新固件

配置生效后,重新编译内核并打包update.img系统镜像

./mkfirmware.sh

./build.sh updateimg

使用RKDevTool将新编译好的固件下载到板子当中(详细操作见4.4小节)

重新给板子上电,系统正常运行。成功进入buildrootGUI界面

五、debian根文件系统的构建 1.配置环境变量

export RK_ROOTFS_SYSTEM=debian 

//如果是yocto 就export RK_ROOTFS_SYSTEM=yocto

2.编译debian

./build.sh debian

3.更新固件

执行以下命令,生成新的update.img

./mkfirmware.sh

./build.sh updateimg

使用RKDevTool将新编译好的固件下载到板子当中(详细操作见4.4小节)

参考教程

1. 编译 Linux 固件 — Firefly Wiki (t-firefly.com)

2. RK3568下载SDK编译源码



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3